package edu.ucue.ECU.dao;


import edu.ucue.ECU.exp.BuscarDatosEmergenciaException;
import edu.ucue.ECU.exp.BuscarDatosOperadorException;
import edu.ucue.ECU.exp.GuardarDatosEmergenciaException;
import edu.ucue.ECU.exp.GuardarDatosEntidadException;
import edu.ucue.ECU.exp.GuardarDatosTipoException;
import edu.ucue.ECU.ngc.Entidad;
import edu.ucue.ECU.ngc.Operador;
import edu.ucue.ECU.ngc.Tipo;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;

public class TipoEmergenciaDB {


    public void buscar(Tipo tipo) throws BuscarDatosEmergenciaException  {
        try {
            Conexion data=Conexion.getInstance();
            Connection var=data.getConexion();
            Statement stmt = var.createStatement();
            String consulta="select * from \"TipoEmergencia\" where \"nombreEmergencia\" ='" + tipo.getNombre() + "'";
            ResultSet resultado = stmt.executeQuery(consulta);
            if (resultado!=null) {
                resultado.next();
               tipo.setId(resultado.getInt("idTipoEmergencia"));
            }
            var.close();
        } catch (SQLException ex) {
            throw new BuscarDatosEmergenciaException("Se produjo un error inesperado al buscar los datos de Emergencia");
        }
    }
    
    public ArrayList listar() throws BuscarDatosEmergenciaException {
        try {
            ArrayList todos=new ArrayList();
            Conexion data=Conexion.getInstance();
            Connection var=data.getConexion();
            Statement stmt = var.createStatement();
            ResultSet resultado = stmt.executeQuery("select * from \"TipoEmergencia\"");
            while (resultado.next()) {
                Tipo miTipo = new Tipo();
                miTipo.setId(resultado.getInt("idTipoEmergencia"));
                miTipo.setNombre(resultado.getString("nombreEmergencia"));
                todos.add(miTipo);
            }var.close();
            return todos;
        } catch (SQLException ex) {
            throw new BuscarDatosEmergenciaException("Se produjo un error inesperado al buscar los datos de emergencia");
        }
    }
    
    public ArrayList listarEntidades(Tipo tipo) throws BuscarDatosEmergenciaException {
        try {
            ArrayList todos=new ArrayList();
            Conexion data=Conexion.getInstance();
            Connection var=data.getConexion();
            Statement stmt = var.createStatement();
            ResultSet resultado = stmt.executeQuery("select * from \"Entidad\"  natural join \"EntidadTipoEmergencia\" natural join \"TipoEmergencia\" where \"nombreEmergencia\"='"+tipo.getNombre()+"'");
            while (resultado.next()) {
                String entidad;
                entidad=(resultado.getString("nombreEntidad"));
                todos.add(entidad);
            }var.close();
            return todos;
        } catch (SQLException ex) {
            throw new BuscarDatosEmergenciaException("Se produjo un error inesperado al buscar los datos de emergencia-entidad");
        }
    }

    public void agregarEntidad(Tipo tipo, Entidad entidad) throws GuardarDatosEmergenciaException  {
        try {
            Conexion data=Conexion.getInstance();
            Connection var=data.getConexion();
            Statement stmt = var.createStatement();
            stmt.execute("insert into \"EntidadTipoEmergencia\" values(" + entidad.getIdEntidad()+ ","+tipo.getId()+")");
            var.close();
        } catch (SQLException ex) {
            throw new GuardarDatosEmergenciaException("Se produjo un error inesperado al guardar los datos de emegencia-entidad");
        }
    }
    
    public void quitarEntidad(Tipo tipo, Entidad entidad) throws GuardarDatosTipoException  {
        try {
            Conexion data=Conexion.getInstance();
            Connection var=data.getConexion();
            Statement stmt = var.createStatement();
            stmt.execute("DELETE FROM \"EntidadTipoEmergencia\" where  \"idTipoEmergencia\"="+tipo.getId()+" and \"idEntidad\"="+entidad.getIdEntidad());
            var.close();
        } catch (SQLException ex) {
            throw new GuardarDatosTipoException("Se produjo un error inesperado al borrar datos de emegencia-entidad");
        }
    }
   
}
